<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			const arr = [11, 22, 33]
			//const 关键字的作用是声明一个不可重新赋值的变量（即变量名不能指向其他内存地址），但它并不保证变量所引用的数据本身不可变。
			// 对于数组、对象等引用类型的变量，const 仅限制了变量名的重新绑定，但对象的内容仍然可以被修改。
			//JavaScript 的 const 仅保证变量名与内存地址的绑定关系不变，而不是数据的不可变性。
			
				//删除元素
				// arr.pop()  	 //删除数组中 最后一个 元素（尾部 p）
				// console.log(arr)
				// arr.shift()	//删除数组中 第一个 元素
				// console.log(arr)
				
				//添加元素
				// arr.push(0)	 	//在数组的 最后面 添加一个 元素
				// console.log(arr)
				// arr.unshift(99)	//在数组的 最前面 添加一个 元素
				// console.log(arr)
				
				//在任意位置 添加或删除 元素
				// arr.splice(startIndex, delCount, addItem)
				//startIndex；起始下标（开始操作的位置)
				//delCount：删除元素的个数
				//addItem：添加的元素
				
					//删除22，
					// arr.splice(1, 1) //22的下标1 
					// console.log(arr)
					
					//将 44 添加 到22后面
					// arr.splice(2, 0, 44) //44添加进去后的下标是 2
					// console.log(arr)
			
			
			// //for循环遍历
			// for(let i = 0; i<arr.length; i++)
			// {
			// 	console.log(arr[i])
			// }
			
			// //forEach遍历
			
			// arr.forEach((item, index, array) => { 
			// 	//item：每次遍历的元素
			// 	//index：元素在数组中的下标
			// 	//array：被遍历的数组本身
			// 	console.log(item, index, array)
			// })
			
			
			const arr02 = [2, 3, 4, 5, 6]
			//过滤/筛选
			//语法
				// arr.filter(( item, index, array ) => {
				// 	//code
				// 	return 布尔值
				// })
			//eg：筛选arr02数组中为偶数的元素
				// const evenNumber =	arr02.filter( (item)  =>  {
				// 	if(item % 2 === 0)
				// 		return true
				//	else
				// 		return false
				// } )		
					
			// 	const evenNumber =	arr02.filter( item  =>  item % 2 === 0 )
			// 	console.log(evenNumber)
			
			// //映射
			// //由一个数组得到另一个数组，长度相同 且 存在一 一对应的关系 
			// //语法
			// 	//item, index, array 是 调用 map 的原数组 中的
			// 	//映射 返回一个数组
			// const double = arr02.map( (item, index, array) =>{
			// 	return item*2
			// } )
			// console.log(double)
			
			// 	//映射 返回 对象元素
			// const objArr = arr02.map( (value, index) =>{
			// 	return {
			// 		value,
			// 		index
			// 	}
			// } )
			// console.log(objArr) //objArr的每个元素都是一个对象
			
			//检测每一个
			//every()
				// arr02.every(( item, index, array )=>{
				// 	//code
				// })
			//eg：检测arr02数组中的每个元素是否都是奇数
				// arr02.every(item => {
				// 	if(item % 2 === 1 )
				// 		return ture
				// 	else
				// 		return false
				// })
				const flag = arr02.every( item => item % 2 === 1 )
				// console.log(flag)
			//eg: 检测arr02中的元素是否都大于0
				const flag2 = arr02.every( item => item > 0 )
				// console.log(flag2)
			
			//汇总
			//常用于数组求和，但不限于数组求和。
			//语法： 
			// arr02.reduce(( prev, item, index, array )=>{
				
			// },初始值)
			
			//eg: 对数组arr02 遍历求和
			   //forEach
			 //   let sum = 0
				// arr02.forEach((item) => {
				// 	sum += item
				// })
				// console.log(sum)
			
				//prev的值是上一次回调函数的返回值，prev的初始值是下面的0
				const sum = arr02.reduce(( prev, item, index, array )=>{
					return prev + item
				}, 0 )
				console.log(sum)
			
			//商品列表数组
			const goodsList = [
				{id: 1, name: '篮球', num: 3},
				{id: 2, name: '足球', num: 2},
				{id: 3, name: '排球', num: 1}
			]
			//求总数量
			const total = goodsList.reduce((prev, item) =>{			 
				 return prev + item.num
			 }, 0 )
			 console.log(total)
			
		</script>
	</body>
</html>